/**
 * 版权所有(C)，上海勾芒信息科技，2017，所有权利保留。
 * 
 * 项目名：	cards-web
 * 文件名：	ReceiveTicketHandler.java
 * 模块说明：	
 * 修改历史：
 * 2017年6月1日 - Debenson - 创建。
 */
package com.alex.wechat.component.handler;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.alex.wechat.component.codemgr.service.WxCodeUploadMgrServiceI;
import com.alex.wechat.core.handler.WxAccountType;
import com.alex.wechat.core.handler.WxHandler;
import com.alex.wechat.mp.config.WxConsts;

import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.message.bean.WxXmlMessage;
import me.chanjar.weixin.message.rule.WxMessageHandler;

/**
 * 小程序代码审核未通过事件处理器
 * 
 * <pre>
 * 审核不通过时，接收到的推送XML数据包示例如下：
 * <xml><ToUserName><![CDATA[gh_fb9688c2a4b2]]></ToUserName>
 * <FromUserName><![CDATA[od1P50M-fNQI5Gcq-trm4a7apsU8]]></FromUserName>
 * <CreateTime>1488856591</CreateTime>
 * <MsgType><![CDATA[event]]></MsgType>
 * <Event><![CDATA[weapp_audit_fail]]></Event>
 * <Reason><![CDATA[1:账号信息不符合规范:<br>
 * (1):包含色情因素<br>
 * 2:服务类目"金融业-保险_"与你提交代码审核时设置的功能页面内容不一致:<br>
 * (1):功能页面设置的部分标签不属于所选的服务类目范围。<br>
 * (2):功能页面设置的部分标签与该页面内容不相关。<br>
 * </Reason>
 * <FailTime>1488856591</FailTime>
 * </xml>
 * 
 * 参数说明：
 * 参数  说明
 * ToUserName      小程序的原始ID
 * FromUserName    发送方帐号（一个OpenID，此时发送方是系统帐号）
 * CreateTime      消息创建时间 （整型），时间戳
 * MsgType         消息类型，event
 * Event           事件类型 weapp_audit_success
 * Reason          审核失败的原因
 * FailTime        审核失败时的时间（整型），时间戳
 * </pre>
 * 
 * @author Debenson
 * @since 0.1
 */
@WxHandler(value = WxConsts.EVT_WEAPP_AUDIT_FAIL, accountType = WxAccountType.COMPONENT)
public class WeAppAuditFailedHandler implements WxMessageHandler {
  private static final Logger logger = LoggerFactory.getLogger(WeAppAuditFailedHandler.class);

  @Autowired
  private WxCodeUploadMgrServiceI codeService;

  @Override
  public String handle(WxXmlMessage wxMessage, Map<String, Object> context)
      throws WxErrorException {
    if (logger.isDebugEnabled()) {
      logger.debug("开始处理代码审核失败消息");
    }

    try {
      String originalId = wxMessage.getToUser();
      String auditFailedreason = wxMessage.getCodeAuditFailedReason();
      codeService.updateByAuditNotification(originalId, false, auditFailedreason);
    } catch (Exception e) {
      logger.error("保存小程序代码审核状态失败", e);
      throw new RuntimeException(e);
    }
    return WxConsts.SUCCESS_MSG;
  }

}
